package com.txz.system.service;

import java.util.List;
import com.txz.system.domain.AppUser;
import com.txz.common.core.domain.model.LoginUser; // 引入LoginUser

/**
 * 商城用户Service接口（含登录/注册扩展）
 * 
 * @author tuxiaozhuo
 * @date 2025-10-21
 */
public interface IAppUserService 
{
    // ---------------------- 原有CRUD接口（保留） ----------------------
    /**
     * 查询商城用户
     * 
     * @param id 商城用户主键
     * @return 商城用户
     */
    public AppUser selectAppUserById(Long id);

    /**
     * 查询商城用户列表
     * 
     * @param appUser 商城用户
     * @return 商城用户集合
     */
    public List<AppUser> selectAppUserList(AppUser appUser);

    /**
     * 新增商城用户
     * 
     * @param appUser 商城用户
     * @return 结果
     */
    public int insertAppUser(AppUser appUser);

    /**
     * 修改商城用户
     * 
     * @param appUser 商城用户
     * @return 结果
     */
    public int updateAppUser(AppUser appUser);

    /**
     * 批量删除商城用户
     * 
     * @param ids 需要删除的商城用户主键集合
     * @return 结果
     */
    public int deleteAppUserByIds(Long[] ids);

    /**
     * 删除商城用户信息
     * 
     * @param id 商城用户主键
     * @return 结果
     */
    public int deleteAppUserById(Long id);

    // ---------------------- 新增登录/注册相关接口 ----------------------
    /**
     * 通过用户名查询商城用户
     * @param username 用户名（账号密码登录用）
     * @return 商城用户信息（含密码）
     */
    public AppUser selectAppUserByUsername(String username);

    /**
     * 通过微信openid查询商城用户
     * @param openid 微信唯一标识（微信登录用）
     * @return 商城用户信息
     */
    public AppUser selectAppUserByOpenid(String openid);

    /**
     * 账号密码注册（含密码加密）
     * @param appUser 商城用户信息（需包含username、password等）
     * @return 注册结果（true=成功）
     */
    public boolean register(AppUser appUser);

    /**
     * 创建微信用户（首次微信授权时）
     * @param openid 微信openid
     * @param unionid 微信unionid（跨公众号唯一标识，可为null）
     * @param nickname 微信昵称
     * @param wxAvatar 微信头像URL
     * @return 新增的用户信息
     */
    public AppUser createWxUser(String openid, String unionid, String nickname, String wxAvatar);

    /**
     * 构建LoginUser对象（用于生成Token）
     * @param appUser 商城用户
     * @return 框架所需的LoginUser对象（含用户ID、用户名等）
     */
    public LoginUser buildLoginUser(AppUser appUser);
}